home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 11 / CU Amiga Magazine's Super CD-ROM 11 (1997)(EMAP Images)(GB)(Track 1 of 3)[!][issue 1997-06].iso / cucd / programming / oberonv4 / source / system / out.mod (.txt) < prev    next >
Oberon Text  |  1996-08-11  |  3KB  |  124 lines

  1. Syntax10.Scn.Fnt
  2. Syntax10b.Scn.Fnt
  3. ParcElems
  4. Alloc
  5. MODULE Out;    (* HM 18 March 1994 *)
  6.     See, and update if necessary the history at the bottom of the file.
  7. IMPORT Display, Viewers, Texts, TextFrames, MenuViewers, Oberon;
  8.     out: Texts.Text;
  9.     v: Viewers.Viewer;
  10.     w: Texts.Writer;
  11. PROCEDURE Open*;
  12.     VAR x, y: INTEGER;
  13. BEGIN
  14.     Oberon.AllocateSystemViewer(0, x, y);
  15.     out := TextFrames.Text("");
  16.     v := MenuViewers.New(
  17.         TextFrames.NewMenu("Standard Output",
  18.             "^Out.Menu.Text"),
  19.         TextFrames.NewText(out, 0), 
  20.         TextFrames.menuH, x, y)
  21. END Open;
  22. PROCEDURE Close*;
  23. BEGIN
  24.     out := Oberon.Log; v := NIL
  25. END Close;
  26. PROCEDURE CheckOpen;
  27. BEGIN
  28.     IF (out # Oberon.Log) & (v.state = 0) THEN Open END
  29. END CheckOpen;
  30. PROCEDURE CheckScroll (t: Texts.Text);
  31.     VAR x: INTEGER; v: Viewers.Viewer; f: Display.Frame; f1: TextFrames.Frame; r: Texts.Reader; ch: CHAR;
  32. BEGIN
  33.     x := 0;
  34.     WHILE x < Display.Width DO
  35.         v := Viewers.This(x, 0);
  36.         WHILE v.state > 1 DO
  37.             f := v.dsc;
  38.             WHILE (f # NIL) & (f IS TextFrames.Frame) DO
  39.                 f1 := f(TextFrames.Frame);
  40.                 IF (f1.text = t) & (f1.H > 0) THEN
  41.                     WHILE t.len > TextFrames.Pos(f1, f1.X + f1.W - 1, f1.Y + 1) DO
  42.                         Texts.OpenReader(r, t, f1.org);
  43.                         REPEAT Texts.Read(r, ch) UNTIL r.eot OR (ch = 0DX);
  44.                         TextFrames.Show(f1, Texts.Pos(r));
  45.                     END
  46.                 END;
  47.                 f := f.next
  48.             END;
  49.             v := Viewers.Next(v)
  50.         END;
  51.         x := x + v.W
  52. END CheckScroll;
  53. (*commands*)
  54. PROCEDURE Char* (ch: CHAR);
  55. BEGIN
  56.     CheckOpen; Texts.Write(w, ch); Texts.Append(out, w.buf)
  57. END Char;
  58. PROCEDURE Int* (i, n: LONGINT);
  59. BEGIN
  60.     CheckOpen; Texts.WriteInt(w, i, n); Texts.Append(out, w.buf)
  61. END Int;
  62. PROCEDURE Real* (r: REAL; n: INTEGER);
  63. BEGIN
  64.     CheckOpen; Texts.WriteReal(w, r, n); Texts.Append(out, w.buf)
  65. END Real;
  66. PROCEDURE LongReal* (r: LONGREAL; n: INTEGER);
  67. BEGIN
  68.     CheckOpen; Texts.WriteLongReal(w, r, n); Texts.Append(out, w.buf)
  69. END LongReal;
  70. PROCEDURE Ln*;
  71.     VAR f: TextFrames.Frame;
  72. BEGIN
  73.     CheckOpen; Texts.WriteLn(w); Texts.Append(out, w.buf);
  74.     CheckScroll(out)
  75. END Ln;
  76. PROCEDURE String* (s: ARRAY OF CHAR);
  77.     VAR i: INTEGER;
  78. BEGIN
  79.     CheckOpen; i := 0;
  80.     WHILE s[i] # 0X DO
  81.         IF s[i] = "$" THEN Ln ELSE Texts.Write(w, s[i]) END;
  82.         INC(i)
  83.     END;
  84.     Texts.Append(out, w.buf)
  85. END String;
  86. PROCEDURE F0 (s: ARRAY OF CHAR; x: ARRAY OF LONGINT);
  87.     VAR i, j: INTEGER;
  88. BEGIN
  89.     CheckOpen; i := 0; j := 0;
  90.     WHILE s[i] # 0X DO
  91.         IF s[i] = "$" THEN Ln
  92.         ELSIF s[i] = "#" THEN Int(x[j], 0); INC(j)
  93.         ELSE Texts.Write(w, s[i])
  94.         END;
  95.         INC(i)
  96.     END;
  97.     Texts.Append(out, w.buf)
  98. END F0;
  99. PROCEDURE F* (s: ARRAY OF CHAR; x: LONGINT);
  100.     VAR a: ARRAY 4 OF LONGINT;
  101. BEGIN
  102.     a[0] := x; F0(s, a)
  103. END F;
  104. PROCEDURE F2* (s: ARRAY OF CHAR; x, y: LONGINT);
  105.     VAR a: ARRAY 4 OF LONGINT;
  106. BEGIN
  107.     a[0] := x; a[1] := y; F0(s, a)
  108. END F2;
  109. PROCEDURE F3* (s: ARRAY OF CHAR; x, y, z: LONGINT);
  110.     VAR a: ARRAY 4 OF LONGINT;
  111. BEGIN
  112.     a[0] := x; a[1] := y; a[2] := z; F0(s, a)
  113. END F3;
  114. PROCEDURE F4* (s: ARRAY OF CHAR; x, y, z, u: LONGINT);
  115.     VAR a: ARRAY 4 OF LONGINT;
  116. BEGIN
  117.     a[0] := x; a[1] := y; a[2] := z; a[3] := u; F0(s, a)
  118. END F4;
  119. BEGIN
  120.     Texts.OpenWriter(w); out := Oberon.Log; v := NIL
  121. END Out.
  122. Date    Author    Modification
  123. 1996-07-31    claudio@dial.eunet.ch    First unified version.
  124.